rows = [
    {'address':'5412 N CLARK', 'date':'07/01/2012'},
    {'address':'5128 N CLARK', 'date':'07/04/2012'},
    {'address':'5800 N 58TH', 'date':'07/02/2012'},
    {'address':'2122 N CLARK', 'date':'07/03/2012'},
    {'address':'5645 N RAVENSWOOD', 'date':'07/02/2012'},
    {'address':'1060 N ADDISON', 'date':'07/02/2012'},
    {'address':'4801 N BROADWAY', 'date':'07/01/2012'},
    {'address':'1039 N GRANVILLE', 'date':'07/04/2012'}
]

from operator import itemgetter
from itertools import groupby

# 首先根据 date 对rows 排序
rows.sort(key=itemgetter('date'))

# groupby 函数只会检查连续的项
# 如果没有先排序，groupby 函数排序时就无法按照所想的方式来记录分组了
# 使用groupby()将rows根据date分组
# 遍历已经排序的并且分组的 rows
# groupby 会创建一个迭代器，每次迭代都会返回一个值和一个子迭代器，这个子迭代器可以产生所有在该分组内具有该值的项
for date, items in groupby(rows,key=itemgetter('date')):
    print(date)
    for i in items:
        print(' ' , i)